package com.jdk.learn.jvm;

/**
 * jvm创建对象 通过new关键字
 * 过程：
 *      1.创建符号引用
 *      2.如果没有，则进行类加载，解析，初始化等。
 *      3.虚拟机给对象分配内存(堆)
 *      4.初始化(变量赋值默认值)
 *      5.调用init方法(以及构造方法)
 *
 *  以下实例可以看出对象赋默认值的情况
 *     _003ObjectInit{age=0, name='null', is18=false}
 *
 *  分配内存时：
 *          采用：指针碰撞以及空闲表的方式进行分配
 *
 *  线程安全则：
 *          采用：线程同步和本地线程分配缓冲(TLAB)
 */
public class _003ObjectInit {
    private  int age;
    private String name;

    private  boolean is18;

    public _003ObjectInit() {
        System.out.println(this.toString());
        System.out.println("实例化成功");
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isIs18() {
        return is18;
    }

    public void setIs18(boolean is18) {
        this.is18 = is18;
    }

    @Override
    public String toString() {
        return "_003ObjectInit{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", is18=" + is18 +
                '}';
    }

    public static void main(String[] args) {
        new _003ObjectInit();
    }
}
